using System;
using System.Collections.Generic;
using System.ServiceModel;

using SIMA.Entities;
using SIMA.Core.Enums;
using SIMA.Core.Security;

namespace SIMA.Services
{

	[ServiceContract]
	public interface IT_C_ProductoService
	{
		#region Get all T_C_Producto
		[OperationContract]
		List<T_C_Producto> GetAllT_C_Producto(Profile securityProfile);

		[OperationContract(AsyncPattern = true)]
		IAsyncResult BeginGetAllT_C_Producto(Profile securityProfile, AsyncCallback callback, object state);

		List<T_C_Producto> EndGetAllT_C_Producto(IAsyncResult asyncResult);

		#endregion

		#region Get filtered T_C_Producto
		[OperationContract]
		List<T_C_Producto> GetFilteredT_C_Producto(Profile securityProfile, FilterType filter);

		[OperationContract(AsyncPattern = true)]
		IAsyncResult BeginGetFilteredT_C_Producto(Profile securityProfile, FilterType filter, AsyncCallback callback, object state);

		List<T_C_Producto> EndGetFilteredT_C_Producto(IAsyncResult asyncResult);

		#endregion

		#region New T_C_Producto
		[OperationContract]
		string RegisterT_C_Producto(Profile securityProfile, T_C_Producto newItem);

		[OperationContract(AsyncPattern = true)]
		IAsyncResult BeginRegisterT_C_Producto(Profile securityProfile, T_C_Producto newItem, AsyncCallback callback, object state);

		string EndRegisterT_C_Producto(IAsyncResult asyncResult);

		#endregion

		#region Update T_C_Producto
		[OperationContract]
		string UpdateT_C_Producto(Profile securityProfile, T_C_Producto itemToUpdate, T_C_Producto itemUpdated);

		[OperationContract(AsyncPattern = true)]
		IAsyncResult BeginUpdateT_C_Producto(Profile securityProfile, T_C_Producto itemToUpdate, T_C_Producto itemUpdated, AsyncCallback callback, object state);

		string EndUpdateT_C_Producto(IAsyncResult asyncResult);

		#endregion

		#region Delete T_C_Producto
		[OperationContract]
		string DeleteT_C_Producto(Profile securityProfile, T_C_Producto dropItem);

		[OperationContract(AsyncPattern = true)]
		IAsyncResult BeginDeleteT_C_Producto(Profile securityProfile, T_C_Producto dropItem, AsyncCallback callback, object state);

		string EndDeleteT_C_Producto(IAsyncResult asyncResult);

		#endregion

	}
}

